﻿
Suivi des évolutions du composant de communication MiCom

____________________________________________________________________________
Version 1.0.3.0		20/05/2014

- version .NET Framework 2.0	(était 3.5 en versions précédentes)
____________________________________________________________________________
Version 1.0.1.2		18/02/2013

- ajout du mode logging
> par écriture de la valeur "loggArg" de la propriété  loggingEnable
> ou par préfixage /loggArg/  de l'argument cmd de la méthode Dialogue()
	. loggArg =  All
	     pour tracer l'accès aux propriétés et méthodes du composant
		 ainsi que l'ensemble des communications.
	. loggArg =  OnUsingComponent
	     pour tracer l'accès aux propriétés et méthodes du composant.
	. loggArg =  OnAllCommunication
	     pour tracer l'ensemble des communications.
	. loggArg =  OnCommunicationError
	     pour tracer les seules communications en erreur.
	. loggArg =  Off
	     pour stopper la trace.

_____________________________________________________________________________
Version 1.0.1.1		15/02/2013

- ajout du traitement des cars de ctrl SO et SI sur protocole Mac
____________________________________________________________________________
Version 1.0.1.1		12/02/2013

- ajout de la gestion du protocole console (Com,Usb et Eth)
> gestion globale par écriture de la proprèté protocolesEnabled
	. lorsque la propriété protocoleseEnabled contient l'item "CON"
	  le protocole console est activé lors de la recherche d'un module.
	Remarque: une fois la connexion d'un module établie (1ere commande) le 
	canal de communication utilisé est dédié à ce protocole c.a.d que tout 
	autre module connecté sur le même canal devra supporter le même protocole.
> gestion locale 
	. utilisation des méthodes expert Open() Dialogue() Close():
		- l'argument protocole de la méthode Open() prend la valeur "CON"
	. utlisation de la méthode DialogueModule():
		- l'argument adresse est affecté de l'offset 0x20000

- évolutions sur la gestion du protocole Mac
> gestion globale par écriture de la proprèté typesModuleEnabled
	. décrit en version 1.0.1.0
> gestion locale 
	. utilisation des méthodes expert Open() Dialogue() Close():
		- l'argument cmd de la méthode Dialogue() est préfixé avec "/Macxx/"
	. utlisation de la méthode DialogueModule():
		- l'argument adresse est affecté de l'offset 0x10000

- ajout de la gestion du protocole sécateur F30xx (Com,Usb et Eth)
> gestion uniquemnt locale 
	. utilisation des méthodes expert Open() Dialogue() Close():
		- arguments de Open() baudrate = "38400" protocole = "CON"
		- argument cmd de Dialogue() selon la syntaxe F3010 (ex: "R76") 
	. utlisation de la méthode DialogueModule():
		- l'argument adresse est affecté de l'offset 0x30000
		- l'argument cmd respecte la syntaxe F3010 (ex: "R76") 

- évolution du driver DrvEth
	. vide les buffers de réception avant toute émission
	  (évite la désynchronisation éventuelle des messages de réponse
	  par exemple dans le cas d'un BMac branché simultannément
	  sur sa liaison usb/Vcp et sur une interface éthernet par
	  sa liaison RS485 ...)
____________________________________________________________________________
Version 1.0.1.0		30/01/2013

- ajout de la gestion du protocole Mac (Com,Usb et Eth)
> gestion globale par écriture de la proprèté typesModuleEnabled
	. lorsque la propriété typesModuleEnabled contient au moins un des 
	  types de module suivant:
		> µMac,DMAC17,DMAC23,DMAC34,BMAC,BMAC_H,xMAC : tous les types de 
		  modules autres que Mac sont autorisés à la scrutation lors des  
		  tentatives de connexion. (à défaut)
		> MAC23,MAC34,MAC : les modules de type Mac sont autorisés à la 
		  scrutation lors des tentatives de connexion.
	Remarque: typesModuleEnabled avec une valeur 'vide' équivaut à
	une valeur de type xMac (à défaut)
	Remarque: une fois la connexion d'un module établie (1ere commande) les 
	types sélectionnés xMac et/ou Mac n'ont plus d'influence sur les 
	communications avec le dit module.
	Dans ces conditions les modules Mac peuvent être indifféremment gérés
	selon:
		> la syntaxe spécifique du langage expert Mac (ex: 250000000000)
		> la syntaxe semi-spécifique du langage Mac/Simpa (ex: gf 12345)
		> la syntaxe du langage DMac (ex: move_to h12C5D ,read #pos , ...)
		  Attention: seules les commandes ayant une interprétation possible
		  au sens Mac sont réellement interpretées.
		  (ex:   #out := b:= x.....x  déclenche une erreur de syntaxe)
> gestion locale avec utilisation d'un préfixe sur l'argument cmd
  de la méthode expert Dialogue()
	. l'argument cmd de la méthode doit être préfixé: /Macxx/
	. le préfixe est nécessaire à chaque communication
- corrige bug valeur baudrate n'est pas int > 0 dans DrvMiCom.Open()
____________________________________________________________________________
Version 1.0.0.9		19/11/2012

- tri des listes de ports détectés par ordre alpha/Num
____________________________________________________________________________
Version 1.0.0.9		25/10/2012

- évolution pour régler Pb plantus exit application après déconnexion port VCP(ftdi) ouvert
// Attention: en framework applicatif 3.5 un objet serialPort.BaseStream correspondant à un VCP ouvert qui a été déconnecté
// ne devra pas être nettoyé par le Garbage collector!
// En effet, après une déconnexion de VCP, si le nettoyage n'a pas été désactivé pour l'objet BaseStream, il vient:
// 1) un plantus systématique lors de l'exit application!       (nettoyage systématique par GC à l'exit)
// 2) un plantus aléatoire aprés rebranchement VCP!             (nettoyage aléatoire par GC)
// désactivation du nettoyage  (DrvMiCom.Open()):       GC.SuppressFinalize(serialCom[i].BaseStream)
// réautorisation du nettoyage (DrvMiCom.Close(hCom)):  GC.ReRegisterForFinalize(serialCom[i].BaseStream) sauf pour VCP déconnecté
____________________________________________________________________________
Version 1.0.0.8		25/09/2012

- changement d'indice sans évolution
____________________________________________________________________________
Version 1.0.0.6		06/09/2012

- ressources linguistiques incorporées à l'assembly  midiIngenierie.com.dll
    - commentaires des catégories et descriptions de la propertygrid du composant
	(design et runtime)
    - messages d'erreur sur utilisation des méthodes et propriétés du composant
	(runtime)
- ressources linguistiques non incorporées à l'assembly et placées dans le .xml
  En culture française  :  /fr/midiIngenierie.com.xml 
  Autre culture         :     /midiIngenierie.com.xml 
    - commentaires sur les méthodes et propriétés du composant de l'explorateur 
      d'objet (design)
    - commentaires sur les méthodes et propriétés du composant en écriture de code
      (design)
____________________________________________________________________________
Version 1.0.0.5		17/07/2012

- ajout de la propriété 'DesignName' et de la surcharge de .ToString()
  pour permettre de retrouver le nom du composant en runTime.
  (nécessaire aux composants d'axe...)
- traduction anglaise des ressources et commentaires.
  switch de compilation 'FR'
  - 1e compilation avec 'FR' => fichier 'MidiIngenierie.Com.xml' :
				commentaires en français sous répertoire Release/fr
  - 2e compilation sans 'FR' => fichier (à défaut)  'MidiIngenierie.Com.xml' :
				commentaires en anglais sous répertoire Release 
  Au même titre que les fichiers de ressources le fichier .xml utilisé dépend
  de manière automatique de la culture du PC.
  Les 2 compilations sont réalisées de manière automatique en ayant une solution
  qui contient 2 projets qui gèrent les mêmes fichiers sources:
  - MiCom pour le projet standard sans switch de compil qui génère le fichier 
	(à défaut)  'MidiIngenierie.Com.xml' en anglais
  - MiCom.fr pour le projet avec switch de compil 'FR' qui génère le fichier 
				'fr/MidiIngenierie.Com.xml' en français
____________________________________________________________________________
Version 1.0.0.5		06/07/2012

- évolution de la méthode UploadFile() de téléchargement de fichier pour gestion
  erreur de ligne de commande.
____________________________________________________________________________
Version 1.0.0.5		04/07/2012

- les propriétés de type string[] ne retournent pas null lorsque le tableau est vide
  mais  string[0]. Ainsi pour tester la présence d'éléments il convient de tester
  tableau.Count() != 0  ou directement utiliser une boucle  foreach  . 
  En effet , une boucle foreach(string element in tableau){} n'effectue aucun pas 
  lorsque le tableau est vide.
____________________________________________________________________________
Version 1.0.0.5		03/07/2012

- la lecture de la propriété ModulesInstalled retourne un tableau contenant
  un nombre d'éléments correspondant au nombre d'éléments installés (pas d'élément vide)
  Si aucun élément installé, le nombre d'éléments tableau.Count() == 0 .
____________________________________________________________________________
Version 1.0.0.5		27/06/2012

- 1 seul espace entre les topics dans les arguments reponse  (GetModuleInstalled() ...)
- ajout de la méthode   SetOffLine()
____________________________________________________________________________
Version 1.0.0.5		25/06/2012

- surcharge des méthodes GetModule() et GetModuleInstalled() avec l'arg bool errorEventEnabled
____________________________________________________________________________
Version 1.0.0.5		19/06/2012

- ajout de la méthode GetLastErrorInfos()
____________________________________________________________________________
Version 1.0.0.5		13/06/2012

- protection sur l'utilisation en multi-threading des propriétés et méthodes
- ajout de la méthode DialogueAllModules(string commande)
- ajout des méthodes surchargées DialogueModule("adr/cde", ...) 
  où l'adresse est combinée à l'argument commande .
- ajout de la méthode GetLastErrorInfos()
____________________________________________________________________________
Version 1.0.0.5		08/06/2012

- protection sur l'utilisation en multi-threading dans l'accès à la méthode DialogueModule()
- limitation du nombre de modules installables à 256 (listConfig à 256 éléments max)
- ajout de l'attribut DefaultValueAttribute() des propriétés 
  (permet la réinitialisation à défaut des propriétés, propriété par propriété)
____________________________________________________________________________
Version 1.0.0.5		07/06/2012

- correction bug ReleaseModule(adr) qui ne supprime pas le module de listConfig
  en mode offLine! 
- la propriété configModules était R/W, elle devient R only
- SetModule(adr) et ReleaseModule(adr) avec adr<0 ou adr > 65635 return ok
- surcharge des méthodes DialogueModule( ..... , bool errorEventEnabled)
	(errorEventEnabled  false pour localement inhiber la procédure OnErrorOnUseMethod)
____________________________________________________________________________
Version 1.0.0.5		31/05/2012

- le nom de l'assembly était MiCmLib.dll
  il devient  Midi-ingenierie.Com.dll
____________________________________________________________________________
Version 1.0.0.4		30/05/2012

- ajout d'un 2eme constructeur MiCom() sans argument IContainer (utilisation Labview ...).
- évite la réentrance des fonctions callback des évenements en erreur.
	Pour cela on introduit le flag f_OnError dans les méthodes GesWritePropertyError() et GesMethodError()
	- f_OnError == false, alors l'appel à la fct callback est réalisé
	- f_OnError == true, alors l'appel à la fct callback est évité
- modification des arguments évenements de la fonction callback OnErrorOnUseMethod(this, arg)
	- ev1	Chaine de caractères donnant le nom de la méthode concernée
	- ev2	Chaine de caractères donnant des informations sur le constat d'erreur
	- ev3	Chaine de caractères donnant l'argument principal de la méthode
	- ev4	Numéro représentatif du type d'erreur
	- ev5	Argument adresse de la méthode (-1 si l'argument adresse n'existe pas ou si adressage en broadcast)
- correction bug lié à l'utilisation multiple de la méthode SetOnLine() sans avoir au préalable déconnecté 
  l'ensemble des modules (clear listModules et listPipes)
  Pour cela on réalise au préalable la déconnexion de l'ensemble des modules dans les méthodes
	SetOnLine() et LoadConfig()
  ainsi que dans l'écriture de la propriété
	ConfigModules
____________________________________________________________________________
Version 1.0.0.3		20/05/2012

- correction divers bug

____________________________________________________________________________
Version 1.0.0.2		11/05/2012

- ajout de la méthode ReleaseAllModules()
____________________________________________________________________________
Version 1.0.0.1		14/02/2012

- anglicisation des noms des propriétés et des méthodes
____________________________________________________________________________
Version 1.0.0.0		17/01/2012

- version origine
____________________________________________________________________________
